package com.ctrip.corp.obt.shard.annotation;

import com.ctrip.corp.obt.generic.utils.StringPool;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 分页注解，配置在Mapper的method上可实现分页功能
 * {@link com.ctrip.corp.obt.shard.sql.mybatis.interceptor.pagination.Page}
 *
 * @author marco.zheng
 * @since 2022-03-16
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface PageQuery {

    /**
     * 自动优化 COUNT SQL
     */
    boolean optimizeCountSql() default true;

    /**
     * 是否进行 count 查询
     */
    boolean searchCount() default true;

    /**
     * 是否优化join sql的count sql(目前只支持left join)
     */
    boolean optimizeJoinOfCountSql() default true;

    /**
     * 自定义的用于分页count的MappedStatement id（mybatis xml中执行sql的完全限定名）
     */
    String countId() default StringPool.EMPTY;

    /**
     * maxLimit 限制条数，默认100条
     */
    long maxLimit() default 100L;
}
